package br.com.sysprova.controller;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import br.com.sysprova.model.HttpRestUtil;
import br.com.sysprova.model.bean.Aluno;
import br.com.sysprova.model.bean.Professor;
import br.com.sysprova.model.bean.Usuario;

public class UsuarioController {

	private Criptografia cript;
	
	private Object alguem;

	private Usuario usuario;

	private Aluno aluno;

	private Professor professor;

	private HttpRestUtil httpRestUtil;

	private String URL_USUARIO = "http://127.0.0.1:8080/SysProvasWS/ws/usuario";

	private String URL_AUTH = URL_USUARIO + "/auth";

	private String URL_SALVAR_PROFESSOR = URL_USUARIO+"/salvarProfessor";
	
	private String URL_SALVAR_ALUNO = URL_USUARIO+"/salvarAluno";

	private String URL_GET = URL_USUARIO;
	
	private String TYPE_JSON="application/json";

	public UsuarioController() {
		httpRestUtil = HttpRestUtil.getHttpRestUtil();
		cript = Criptografia.getInstance();
	}

	public boolean salvarAluno(String email, String matricula, String nome,
			String senha) {
		try {
			Gson gsonConverter = new GsonBuilder().create();
			aluno = new Aluno();
			aluno.setEmail(email);
			aluno.setMatricula(matricula);
			aluno.setNome(nome);
			aluno.setSenha(senha);
			httpRestUtil.enviaDadosWS(URL_SALVAR_ALUNO, "POST", TYPE_JSON,
					gsonConverter.toJson(aluno).getBytes());
			return true;
		} catch (Exception e) {
			return false;
		}

	}

	public boolean salvar(String email, String matricula, String nome,
			String senha, Integer cargaHoraria, String titulo) {
		try {
			Gson gsonConverter = new GsonBuilder().create();
			usuario = new Usuario();
			usuario.setEmail(email);
			usuario.setMatricula(matricula);
			usuario.setNome(nome);
			usuario.setSenha(senha);
			httpRestUtil.enviaDadosWS(URL_USUARIO, "POST", TYPE_JSON,
					gsonConverter.toJson(usuario).getBytes());
			return true;
		} catch (Exception e) {
			return false;
		}
	}
	public boolean salvarProfessor(String email, String matricula, String nome,
			String senha, Integer cargaHoraria, String titulo) {
		try {
			Gson gsonConverter = new GsonBuilder().create();
			professor = new Professor();
			professor.setCargaHoraria(cargaHoraria);
			professor.setEmail(email);
			professor.setNome(nome);
			professor.setMatricula(matricula);
			professor.setTitulo(titulo);
			professor.setSenha(senha);
			httpRestUtil.enviaDadosWS(URL_SALVAR_PROFESSOR, "POST", TYPE_JSON,
					gsonConverter.toJson(professor).getBytes());
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public Object autentica(String matricula, String senha) {

		try {
			byte[] loginC = cript.critografa(matricula);
			byte[] senhaC = cript.critografa(senha);
			Gson conversorGson = new GsonBuilder().create();
			String resultado = httpRestUtil.getRESTFileContentAuth(URL_AUTH,
					matricula, senha);
			System.out.println(resultado);
			String rJson = resultado.split("tipoDoObjeto=")[0];
			String rTipo = resultado.split("tipoDoObjeto=")[1];
			System.out.println("rJson "+rJson);
			System.out.println("rTipo "+rTipo);
//			if (rTipo.equalsIgnoreCase("Professor")) {
//				alguem = conversorGson.fromJson(rJson, Professor.class);
//			} else if (rTipo.equalsIgnoreCase("Aluno")) {
//				alguem = conversorGson.fromJson(rJson, Aluno.class);
//			} else if (rTipo.equalsIgnoreCase("Usuario")) {
//				alguem = conversorGson.fromJson(rJson, Usuario.class);
//			}
			alguem = conversorGson.fromJson(rJson, Class.forName("br.com.sysprova.model.bean."+rTipo));
			
			
			
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return alguem;
	}
}
